iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0

今天來介紹一下要如何管理一個 Rust 專案,因為在開發大型專案時,如何組織程式碼是很重要的。

Rust 有一系列的功能能讓你管理你的程式碼組織,包含哪些細節能對外提供、哪些細節是私有的,以及程式中每個作用域的名稱為何,包含:Package, Crates, Modules.

Crate

  • 一個 crate 就是一個獨立的編譯單位。
  • 有兩種形式:
    • Binary crate:產生可執行檔(如 main.rs)
    • Library crate:產生函式庫(如 lib.rs)

Crate 是 Rust 最小的編譯單位,每個 crate 會產生一個 .rlib(library)或執行檔。


Package

  • 一個 Package 是一個提供 Cargo 管理的單位,對應到一個資料夾,包含一個或多個 Crate。
  • 每個 Package 必須包含一個 Cargo.toml 檔案,用來定義:
    • 名稱
    • 版本
    • 依賴
    • 指定的 crate(lib 或 bin)

通常一個 package 最多含有:

  • 一個 src/lib.rs(library crate)
  • 多個 src/bin/*.rs(binary crates)

Module

  • 模組是 crate 內部邏輯的組織方式。
  • 讓你能將一個大的程式分解成多個檔案與邏輯區塊。
  • 透過 mod、pub、use 等關鍵字來組織與引入模組。

模組的目標是提高程式碼的可讀性與可維護性。


大型 Rust 專案的結構步驟

從零建立一個大型 Rust 專案的步驟:


建立一個新的 package

cargo new my_project
cd my_project

這會建立:

my_project/
├── Cargo.toml      ← 定義 package 名稱、版本、依賴等
└── src/
    └── main.rs     ← 預設的 binary crate 入口點

lib.rs

如果專案越來越大,建議拆出一個 library crate:

src/
├── main.rs      ← binary crate:負責 I/O、CLI 等
└── lib.rs       ← library crate:核心邏輯、模組定義

在 main.rs:

use my_project::core::hello;

fn main() {
    hello();
}

在 lib.rs:

pub mod core;

建立模組與副檔案

模組可以放在檔案或資料夾:

src/
├── lib.rs
└── core/
    ├── mod.rs       ← 宣告模組
    ├── foo.rs
    └── bar.rs

core/mod.rs:

pub mod foo;
pub mod bar;

core/foo.rs:

pub fn say_foo() {
    println!("This is foo!");
}

lib.rs 會這樣寫:

pub mod core;

多 binary crate(多執行程式)

Rust 支援在 src/bin/ 下放多個執行檔:

src/
├── main.rs
├── lib.rs
└── bin/
    ├── server.rs
    └── client.rs

你可以使用:

cargo run --bin server
cargo run --bin client

建立多個 Package(工作區)

當需要更明確分工(例如一個前端、一個核心庫、一個 CLI 工具),可以建立 Workspace

mkdir my_project
cd my_project
cargo new core_lib --lib
cargo new cli_tool --bin

# 建立 Cargo.toml (workspace)

my_project/Cargo.toml:

[workspace]
members = ["core_lib", "cli_tool"]

在 cli_tool/Cargo.toml:

[dependencies]
core_lib = { path = "../core_lib" }

然後就可以在 cli_tool 中使用 core_lib 了。



上一篇
【Day12】- Rust(Tokio)
下一篇
【Day14】- Rust(自動化測試)
系列文
NautilusTrader 架構解析:Rust 在高效能量化交易平台中的角色與優勢22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言